package com.ruoyi.alarmmanagement.mapper;

import com.ruoyi.alarmmanagement.entity.TerminalWarn;
import com.ruoyi.alarmmanagement.entity.WarnStrategy;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 预警策略
 *
 * @author TsingYu
 * @version 1.0
 * @date 2024/8/12 11:40
 */
public interface WarnStrategyMapper {
    /**
     * 查找预警策略
     *
     * @param warnStrategy 筛选条件
     * @return List
     */
    List<WarnStrategy> selectWarnStrategy(WarnStrategy warnStrategy);

    /**
     * 大表瞬时流量突变预警的信息<br>
     * 昨日瞬时流量大于前七天均值的多少倍，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectInstantNumberMutationDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 大用户表数据完整性预警的信息<br>
     * 昨日采集数据条数不超过多少条，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectCompletenessDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 压力数值突变预警的信息<br>
     * 昨日压力大于前七天平均值的多少，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectPressureMutationDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 户表持续零用量预警的信息<br>
     * 连续多少天日用量为0，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectZeroUsageXb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 户表持续未上报预警的信息<br>
     * 连续多少天没有日用量，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectNoReportXb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 户表用量突增预警的信息<br>
     * 昨日用量大于前七天均值的多少倍，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectUsageMutationXb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 大用户表通讯故障预警的信息<br>
     * 连续多少天没有数据，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectNoReportDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);


    /**
     * 大用户表日用量预警的信息<br>
     * 昨日用量超过前七天的多少倍，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectUsageMutationDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 大用户表通讯板电压异常预警的信息<br>
     * 昨日终端电压小于多少，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectAbnormalVoltageDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 大用户表累计流量突减预警的信息<br>
     * 昨日某个点的正向流量值比上一时间点的正向流量小于多少，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectFlowReduceSuddenlyDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);

    /**
     * 大用户表流量空值预警的信息<br>
     * 连续多少天上报的流量都是空，则触发报警
     *
     * @param date         查询日期
     * @param warnType     预警类型
     * @param terminalType 表类型
     * @return List
     */
    List<TerminalWarn> selectZeroUsageDb(@Param("date") Date date, @Param("warnType") String warnType, @Param("terminalType") String terminalType);
}
